// pages/report/report.js
const app = getApp()

Page({
  data: {
    allocationId: '',
    allocation: {},
    productItems: [],
    selectedItems: [],
    workType: 'piece', // 'piece' 或 'time'
    workHours: '',
    remark: '',
    loading: true,
    submitting: false,
    imageUrls: [], // 图片URL数组
    itemImages: {}, // 每个产品编号对应的图片 {itemNo: [urls]}
    // 简单协作数据
    processList: [], // 工序列表
    userList: [], // 员工列表
    selectedProcessIndex: -1, // 选中的工序索引
    selectedUserIndex: -1 // 选中的员工索引

  },

  onLoad(options) {
    console.log('=== 报工页面加载 ===')
    console.log('页面参数:', options)
    
    if (options.allocation_id) {
      console.log('分配ID:', options.allocation_id)
      this.setData({
        allocationId: options.allocation_id
      })
      this.loadReportData()
    } else {
      console.error('缺少分配ID参数')
    }
  },

  // 加载报工数据
  loadReportData() {
    console.log('=== 加载报工数据 ===')
    console.log('分配ID:', this.data.allocationId)
    
    // 并行加载报工数据、工序列表和员工列表
    Promise.all([
      app.request({
        url: '/getReportData',
        data: {
          allocation_id: this.data.allocationId
        }
      }),
      app.request({
        url: '/getSimpleProcessList'
      }),
      app.request({
        url: '/getSimpleUserList'
      })
    ]).then(([reportRes, processRes, userRes]) => {
      console.log('获取报工数据成功:', reportRes)
      console.log('获取工序列表成功:', processRes)
      console.log('获取员工列表成功:', userRes)
      
      this.setData({
        allocation: reportRes.data,
        productItems: reportRes.data.product_items || [],
        processList: processRes.data || [],
        userList: userRes.data || [],
        loading: false
      })
    }).catch((err) => {
      console.error('获取数据失败:', err)
      this.setData({
        loading: false
      })
      wx.showToast({
        title: '获取数据失败',
        icon: 'none'
      })
    })
  },

  // 切换工作类型
  onWorkTypeChange(e) {
    this.setData({
      workType: e.detail.value
    })
  },

  // 选择产品编号
  onItemSelect(e) {
    const itemNo = e.currentTarget.dataset.item
    const selectedItems = [...this.data.selectedItems]
    const index = selectedItems.indexOf(itemNo)
    
    if (index > -1) {
      selectedItems.splice(index, 1)
      // 移除该产品编号的图片数据
      const itemImages = { ...this.data.itemImages }
      delete itemImages[itemNo]
      this.setData({
        selectedItems,
        itemImages
      })
    } else {
      selectedItems.push(itemNo)
      // 初始化该产品编号的图片数组
      const itemImages = { ...this.data.itemImages }
      itemImages[itemNo] = []
      this.setData({
        selectedItems,
        itemImages
      })
    }
  },

  // 工时输入
  onWorkHoursInput(e) {
    this.setData({
      workHours: e.detail.value
    })
  },

  // 备注输入
  onRemarkInput(e) {
    this.setData({
      remark: e.detail.value
    })
  },

  // 选择图片
  chooseImage(e) {
    const itemNo = e.currentTarget.dataset.item
    const currentImages = this.data.itemImages[itemNo] || []
    
    console.log('=== 选择图片 ===')
    console.log('产品编号:', itemNo)
    console.log('当前图片数量:', currentImages.length)
    console.log('可选择的图片数量:', 9 - currentImages.length)
    
    wx.chooseImage({
      count: 9 - currentImages.length,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        console.log('选择图片成功:', res)
        console.log('选择的图片数量:', res.tempFilePaths.length)
        console.log('临时文件路径:', res.tempFilePaths)
        this.uploadImages(res.tempFilePaths, itemNo)
      },
      fail: (err) => {
        console.error('选择图片失败:', err)
        wx.showToast({
          title: '选择图片失败',
          icon: 'none'
        })
      }
    })
  },

  // 上传图片
  uploadImages(tempFilePaths, itemNo) {
    const that = this
    const currentImages = that.data.itemImages[itemNo] || []
    
    console.log('=== 开始上传图片 ===')
    console.log('产品编号:', itemNo)
    console.log('临时文件路径:', tempFilePaths)
    console.log('当前图片数量:', currentImages.length)
    console.log('上传URL:', app.globalData.baseUrl + '/uploadImage')
    console.log('Token:', wx.getStorageSync('token'))
    
    tempFilePaths.forEach((tempFilePath, index) => {
      console.log(`=== 开始上传第${index + 1}张图片 ===`)
      console.log('图片索引:', index)
      console.log('图片路径:', tempFilePath)
      console.log('总图片数量:', tempFilePaths.length)
      
      // 添加延迟，避免同时发送太多请求
      setTimeout(() => {
        // 添加更多调试信息
        console.log('文件信息:', {
          filePath: tempFilePath,
          name: 'file',
          formData: {
            item_no: itemNo
          },
          header: {
            'Authorization': 'Bearer ' + wx.getStorageSync('token')
          }
        })
        
        wx.uploadFile({
          url: app.globalData.baseUrl + '/uploadImage',
          filePath: tempFilePath,
          name: 'file',
          formData: {
            item_no: itemNo
          },
          header: {
            'Authorization': 'Bearer ' + wx.getStorageSync('token')
          },
          success: (res) => {
            console.log('=== 上传响应详情 ===')
            console.log('完整响应对象:', res)
            console.log('响应状态码:', res.statusCode)
            console.log('响应头信息:', res.header)
            console.log('响应数据:', res.data)
            console.log('响应数据类型:', typeof res.data)
            console.log('响应数据长度:', res.data ? res.data.length : 0)
            
            try {
              const data = JSON.parse(res.data)
              console.log('解析后的数据:', data)
              console.log('数据code值:', data.code)
              console.log('数据msg值:', data.msg)
              console.log('数据data值:', data.data)
              
              if (data.code === 1) {
                console.log(`=== 第${index + 1}张图片上传成功 ===`)
                console.log('图片URL:', data.data.url)
                console.log('本地URL:', data.data.local_url)
                console.log('云端URL:', data.data.cloud_url)
                console.log('备份信息:', data.data.backup_info)
                console.log('上传状态:', data.data.upload_status)
                console.log('七牛状态:', data.data.qiniu_status)
                
                // 使用本地URL（保持兼容性）
                currentImages.push(data.data.url)
                that.setData({
                  [`itemImages.${itemNo}`]: currentImages
                })
                console.log(`第${index + 1}张图片已添加到列表，当前图片数量:`, currentImages.length)
                wx.showToast({
                  title: `第${index + 1}张图片上传成功`,
                  icon: 'success'
                })
              } else {
                console.error('上传失败，错误信息:', data.msg)
                console.error('错误代码:', data.code)
                console.error('错误时间:', data.time)
                wx.showToast({
                  title: data.msg || '图片上传失败',
                  icon: 'none'
                })
              }
            } catch (parseError) {
              console.error('=== 解析错误详情 ===')
              console.error('解析错误:', parseError)
              console.error('解析错误消息:', parseError.message)
              console.error('原始响应数据:', res.data)
              console.error('原始响应数据类型:', typeof res.data)
              wx.showToast({
                title: '响应数据解析失败',
                icon: 'none'
              })
            }
          },
          fail: (err) => {
            console.error(`=== 第${index + 1}张图片上传失败 ===`)
            console.error('图片索引:', index)
            console.error('图片路径:', tempFilePath)
            console.error('失败错误对象:', err)
            console.error('错误详情:', JSON.stringify(err))
            console.error('错误消息:', err.errMsg)
            console.error('错误状态码:', err.statusCode)
            wx.showToast({
              title: `第${index + 1}张图片上传失败`,
              icon: 'none'
            })
          }
        })
      }, index * 500) // 每张图片延迟500毫秒
    })
  },

  // 删除图片
  deleteImage(e) {
    const { item, index } = e.currentTarget.dataset
    const currentImages = this.data.itemImages[item] || []
    currentImages.splice(index, 1)
    this.setData({
      [`itemImages.${item}`]: currentImages
    })
  },

  // 预览图片
  previewImage(e) {
    const { urls, current } = e.currentTarget.dataset
    wx.previewImage({
      urls: urls,
      current: current
    })
  },

  // 提交报工
  submitReport() {
    const { allocationId, workType, selectedItems, workHours, remark, processList, userList, selectedProcessIndex, selectedUserIndex } = this.data
    
    if (workType === 'piece' && selectedItems.length === 0) {
      wx.showToast({
        title: '请选择产品编号',
        icon: 'none'
      })
      return
    }
    
    if (workType === 'time' && (!workHours || workHours <= 0)) {
      wx.showToast({
        title: '请输入工时',
        icon: 'none'
      })
      return
    }

    this.setData({
      submitting: true
    })

    // 构建协作信息
    let collaborationInfo = ''
    if (selectedProcessIndex >= 0 && selectedUserIndex >= 0) {
      const selectedProcess = processList[selectedProcessIndex]
      const selectedUser = userList[selectedUserIndex]
      collaborationInfo = `协作工序: ${selectedProcess.name}, 协作员工: ${selectedUser.nickname}`
    }

    // 合并备注和协作信息
    const finalRemark = remark ? (collaborationInfo ? `${remark}\n${collaborationInfo}` : remark) : collaborationInfo

    // 调试信息
    console.log('=== 报工调试信息 ===')
    console.log('原始备注:', remark)
    console.log('选中的工序索引:', selectedProcessIndex)
    console.log('选中的员工索引:', selectedUserIndex)
    console.log('工序列表:', processList)
    console.log('员工列表:', userList)
    console.log('协作信息:', collaborationInfo)
    console.log('最终备注:', finalRemark)

    // 为每个选中的产品编号创建单独的报工记录
    const promises = []
    
    if (workType === 'piece') {
      // 计件报工：每个编号单独报工
      selectedItems.forEach(itemNo => {
        const itemImages = this.data.itemImages[itemNo] || []
        promises.push(
          app.request({
            url: '/submitReport',
            method: 'POST',
            data: {
              allocation_id: allocationId,
              item_nos: [itemNo], // 每个编号单独提交
              work_type: workType,
              work_hours: 0,
              remark: finalRemark,
              image_urls: itemImages // 该产品编号的图片
            }
          })
        )
      })
    } else {
      // 计时报工：整体提交
      promises.push(
        app.request({
          url: '/submitReport',
          method: 'POST',
          data: {
            allocation_id: allocationId,
            item_nos: [],
            work_type: workType,
            work_hours: workHours,
            remark: finalRemark
          }
        })
      )
    }

    // 等待所有报工完成
    Promise.all(promises).then((results) => {
      return Promise.resolve()
    }).then(() => {
      wx.showToast({
        title: workType === 'piece' ? `成功报工${selectedItems.length}个产品` : '报工成功',
        icon: 'success'
      })
      
      // 返回上一页
      setTimeout(() => {
        wx.navigateBack()
      }, 1500)
    }).catch((err) => {
      this.setData({
        submitting: false
      })
      wx.showToast({
        title: err.msg || '报工失败',
        icon: 'none'
      })
    })
  },

  // 工序选择
  onProcessChange(e) {
    const index = e.detail.value
    this.setData({
      selectedProcessIndex: index
    })
  },

  // 员工选择
  onUserChange(e) {
    const index = e.detail.value
    this.setData({
      selectedUserIndex: index
    })
  }
}) 